pyenv- 环境管理

pyenv- 环境管理

Pyenv 是一个简单的 python 版本管理工具。它允许您轻松地在多个版本的 Python 之间切换。它简单,不引人注目,并且遵循 UNIX 的传统,即只做一件事的单一用途工具。

以后想体验最新版本的 Python,通过 pyenv 来下载和管理即可。

Linux 环境下

Github:GitHub - pyenv/pyenv: Simple Python version management

无法在 Windos 平台使用,但是好在我们还有 pyenv-win

目前用不上,以后用的上了再来学习。也很简单,TODO

Windows 环境下

官网:pyenv for Windows | pyenv-win

Github:GitHub - pyenv-win/pyenv-win: pyenv for Windows.

参考安装教程:Python的pyenv-win工具安装与使用 - 文章详情 - 李庆松的博客

官方安装教程:installation.md

工具很简单,安装很简单,使用也很简单,

安装

直接通过 pip 安装

pip install pyenv-win --target D:/pyenv-win/.pyenv

然后安装环境变量,官方文档里是直接设置在用户的环境变量里,我为了方便起见,设置到系统的环境变量里,注意,此时需要以管理员的身份运行 Windows Terminal,否则提示没有权限。

官方文档:add-system-settings

在 Powersehll 中设置环境变量,请看《PowerShellTips.md

[System.Environment]::SetEnvironmentVariable('PYENV', "D:\pyenv-win\.pyenv\pyenv-win\","Machine")
[System.Environment]::SetEnvironmentVariable('PYENV_ROOT', "D:\pyenv-win\.pyenv\pyenv-win\","Machine")
[System.Environment]::SetEnvironmentVariable('PYENV_HOME', "D:\pyenv-win\.pyenv\pyenv-win\","Machine")
[System.Environment]::SetEnvironmentVariable('path', "D:\pyenv-win\.pyenv\pyenv-win\bin;" + "D:\pyenv-win\.pyenv\pyenv-win\shims;" + [System.Environment]::GetEnvironmentVariable('path', "Machine"),"Machine")

Github 的 README 和官网都首推用 PowerShell 来安装:

Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"

这里不推荐,因为这个脚本的内容是默认安装位置到 C:\Users\wwwli\.pyenv\.version,也就是 C 盘,而且不能进行配置。

其实看这个脚本,基本上可以看清楚安装的过程就是下载安装包,然后解压,然后设置相应的环境变量,然后我们 shell 中在输入 pyenv 的时候可以找到解压路径下的命令,其实大部分的软件安装都是这个步骤,卸载的步骤也是差不多的,删除相关的环境变量,删除安装包即可。

跟我们通过 pip 安装是一样的

重新打开一个 shell,输入 pyenv --version 能正常显示版本信息即安装成功。

注意:

一般我们在安装 pyenv 之前就已经安装了 Python,不然你也没法用 pip 下载,pyenv 不会自动识别这个 Python 版本,因为 pyenv 只会管理通过 pyenv 下载的版本。这样也好。

使用

pyenv install -l 查看 pyenv-win 支持的 Python 版本,然后通过 pyenv install <version> 下载指定的版本,下载下来的包会放到 \.pyenv\pyenv-win\install_cache 下面,然后安装到 .pyenv\pyenv-win\versions 目录中。

教程 Python的pyenv-win工具安装与使用 - 文章详情 - 李庆松的博客 里说官方镜像下载很慢,需要更换为淘宝的镜像,但是实际上我下载的时候挺快的,更换为淘宝镜像之后反而很慢,可能跟我本地使用了代理有关。

更换镜像的方法为:

修改 pyenv-win\libexec\libs 目录下(特别提示,对早期 pyenv-win 是在 pyenv-win\libexec 目录下)的 pyenv-install-lib.vbs 文件中 mirror="https://www.python.org/ftp/python" 引号内的改为 https://npm.taobao.org/mirrors/python/

在下载多个版本之后,可通过 pyenv versions 检查所有下载的版本,然后可在其中选择一个版本,通过 pyenv global <version> 将其设置为全局版本,通过在指定目录下执行 pyenv version 或者 python --version 即可检查在当前目录下使用的 Python 版本,通过在命令行中执行 python -c "import sys; print(sys.executable)" 来查看当前目录下使用的 python 的具体安装地址。一般都为 \.pyenv\pyenv-win\versions\ 目录下安装的版本。

如果是第一次安装设置,设置后输入 python --version 查看版本,如果不是自己设置的版本,就查看下在系统环境变量 Path 中是否设置死了 python 的路径,删除即可,然后重新 cmd 打开对话框,查看版本

环境变量设置: 我的电脑 ->右键 ->选择属性 -> 高级系统设置 ->环境变量,主要是查看 Path 变量,不管是系统级别的还是用户级别的都可以看下。

如果你想在某个目录下使用跟全局版本不一样的版本,比如在某个项目的文件夹下,此时你可以在这个目录下执行 pyenv global <another-version>,为这个目录设置一个本地版本。

如果你切换了 Python 版本,最好执行以下 pyenv rehash

在使用 pip 安装或卸载任何库或修改 .pyenv\pyenv-win\versions 文件夹中的文件之后(比如安装了新版本的 Python 或者切换 Python 版本),您必须运行 pyenv rehash 来为 python 和库的命令文件(executables)更新 pyenv。

PS:本来我电脑上就安装了 Python 3.10.4,安装 pyenv 之后,我又通过 pyenv 安装了 Python 3.10.4,两个软件相互不干扰,完美。

相关命令

更新

官方文档:update-pyenv

通过哪个 Python 下载的 pyenv-win,就通过哪个 Python 更新。

首先到原始版本的 <python_home>\Lib\site-packages 目录下新建 easy_install.pth 文件,文件内容为在 安装 小节安装 pyevn-win 的时候指定的 --target 路径,即 pyevn-win 的安装路径,我本地,easy_install.pth 文件的路径就是 D:\Python\Python3.10.4\Lib\site-packages\easy_install.pth.pthpyevn-win 的安装路径是 D:/pyenv-win/.pyenv

然后即可开始更新,但是因为我们使用 pyenv 已经设置了全局版本,肯定是没法直接使用 pip 命令了,只能到原始版本的 Python 的 \Scripts 目录下直接执行 ./pip.exe。比如查看所有依赖

cd D:\Python\Python3.10.4\Scripts
./pip.exe list | findstr pyenv-win

查看是否能查找到 pyenv,然后在此目录下执行

./pip.exe install --upgrade pyenv-win

卸载

卸载的步骤跟安装的过程是差不多的,删除相关的环境变量,通过 pip 删除 pyenv-win 包即可。删除的环境变量参考 安装 小节创建的环境变量,通过 pip 删除需要参考 更新 小节,到特定的目录下通过 ./pip.exe 执行 pip 命令。